记一次不知道 IPv6 区域 ID 而误以为是 Docker 引起的从而寻求解决的记录

#结论

没有使用区域 ID导致的

IPv6 中的 fe80::/10 是专门为单个网络链路设计的,这些地址仅存在单个网络链路,不能被路由到互联网上,而当存在多个网络链路时,这个地址就可能重复,也正是如此存在的了区域 ID 用来区分同一个链路本地地址是那个接口的实例

在 Debian 等 Linux 系统上区域 ID 为网卡名称,例如 fe80::62be:b4ff:fe0c:b5c0%docker0 在 Windows 则是网卡序号,例如:fe80:0:0:0:62be:b4ff:fe0c:b5c0%7

#过程

开启后软路由无法连接上一级路由器局域网的 IPv6 地址,这导致 Docker 创建的容器 IPv6 DNS 解析全部失效,无法访问网络

ping fe80::62be:b4ff:fe0c:b5c0
# 64 bytes from fe80::62be:b4ff:fe0c:b5c0%eth0: icmp_seq=9 ttl=64 time=0.027 ms

ping fe80::d6da:21ff:fe65:cde6
# From fe80::42:25ff:fe6f:cdda%docker0 icmp_seq=2 Destination unreachable: Address unreachable

可以看到上一级路由器的 IPv6 地址 fe80::d6da:21ff:fe65:cde6 进入了作用域为 docker0 的网卡

使用 ip addr 查询网卡 docker0 状态

ip addr show docker0

得到网卡状态

7: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether ██:██:██:██:██:██ brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 2001:db8:1::1/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::42:25ff:fe6f:cdda/64 scope link
       valid_lft forever preferred_lft forever
    inet6 fe80::1/64 scope link
       valid_lft forever preferred_lft forever

由上可知 docker0 分配了三个 IPv6 的范围,分别是

2001:db8:1::1/64
fe80::42:25ff:fe6f:cdda/64
fe80::1/64

这导致来自在三个范围内的地址通信全部被路由到了 docker0

然后再使用 ip addr 查询 eth0 的状态

ip addr show eth0

得到网卡状态

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ██:██:██:██:██:██ brd ff:ff:ff:ff:ff:ff
    altname enp2s0
    inet 192.168.██.██/24 brd 192.168.██.██ scope global eth0
       valid_lft forever preferred_lft forever
    inet6 240█:████:████:████:████:████:████:████/64 scope global dynamic mngtmpaddr
       valid_lft 3185sec preferred_lft 3168sec
    inet6 fe80::62be:b4ff:fe0c:b5c0/64 scope link
       valid_lft forever preferred_lft forever

eth0 网卡只存在一个本地 IPv6 范围 fe80::62be:b4ff:fe0c:b5c0,这是不能 ping 通的原因,也是这个原因导致 DNS 查询失败。

在指定区域域 id 后再 ping 才可以正常访问

ping fe80::d6da:21ff:fe65:cde6%eth0
992 Words

最后更新于